import json

import pytest,os,time,shutil
#将报告窗口标题改为自定义标题
def set_windows_title(new_name,file_path):
    # 1,用读取的方式打开index.html文件，并保存到对象内
    f=open(f'{file_path}/index.html','r',encoding='utf-8')
    # 读取文件内容保存到data列表内
    data=f.readlines()
    f.close()
    # 用写入的方式打开，并清理内容重新写入、
    w=open(f'{file_path}/index.html', 'w', encoding='utf-8')
    # 循环遍历取出来的数据，如果有符合条件的数据直接进行修改即可
    for line in data:
        w.write(line.replace('Allure Report',new_name))
    w.close()

def config_title(new_name,file_path):
    # 以读取的方法打开json文件，保存到对应发f对象中
    f=open(f'{file_path}/widgets/summary.json','r',encoding='utf-8')
    # 将文件转换成字典格式的data变量中
    data=json.load(f)
    #修改data变量的key=value的值
    data['reportName']=new_name
    #关闭文件
    f.close()
    #以写入的方式打开文件并清理历史的文件内容
    w=open(f'{file_path}/widgets/summary.json','w',encoding='utf-8')
    #写入文件的内容后保存
    json.dump(data,w,indent=4,ensure_ascii=False)
    #关闭文件
    w.close()

#自动清理报告
def auto_clear(n):
    #获取测试报告的文件存储位置
    path=os.path.dirname(__file__)+'/testReport/'
    #获取当前目录所有的文件名
    file_list=os.listdir(path)
    # 获取文档的创建时间，并对创建时间进行排序。
    file_list.sort(key=lambda a:os.path.getctime(path+a))
    # 遍历所有文件然后进行删除。
    #可以遍历列表的是加上限制，使用切片
    for i in file_list[:-n]:
        #捕获异常， 两种方式都能删除，os.remove只能删除文件，shutil.rmtree只可以删文件夹
        try:
            os.remove(path+i)
        except:
            shutil.rmtree(path+i)
# auto_clear()






if __name__ == '__main__':
    #获取当前时间作为报告名称
    time_path=time.strftime('%Y_%m_%d_%H_%M_%S')
    #设置一个测试报告的保存路径
    path=os.path.dirname(__file__)+'/testReport/temp'
    report=os.path.dirname(__file__)+f'/testReport/{time_path}'
    # 执行框架爱内所有复合规则的测试用例脚本--生成临时报告json、text
    pytest.main([f'--alluredir={path}','--clean-alluredir'])
# 将临时报告转换为美观的allure报告-----html格式
    os.system(f'allure generate {path} -o {report}')

# 创建一个bat文件用于查看那报告的批量处理文件方式
    f=open(f'{report}/查看报告.bat','w',encoding='utf-8')
    f.write('allure open ./')
    f.close()
# 发送报告，压缩测试报告
    zip_path=shutil.make_archive(base_name=f'{path}/{time_path}测试报告',format='zip',root_dir=report)
# 改写测试报告内容
    set_windows_title('侧开',report)
# 改写测试报告中的标题名
    config_title('登录',report)
# 清理报告
    auto_clear(10)
    from common.dingtalk import DingTalk
    dt=DingTalk()
    # 获取当前目录所有的文件名
    report1=os.path.dirname(__file__) + '/testReport'
    file_list = os.listdir(report1)
    # 获取文档的创建时间，并对创建时间进行排序。
    file_list.sort(key=lambda a: os.path.getctime(report1+'/'+ a))
    re=file_list[-1]
    dt.send_link('尝试一下能不能打开',f'http://192.168.1.28:8080/app/{re}')
